home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / term-source.lha / PathPanel.c < prev    next >
C/C++ Source or Header  |  1995-09-28  |  12KB  |  486 lines

  1. /*
  2. **    PathPanel.c
  3. **
  4. **    Editing panel for path configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_AUPLOAD=1000,GAD_ADOWNLOAD,GAD_TUPLOAD,GAD_TDOWNLOAD,
  13.         GAD_BUPLOAD,GAD_BDOWNLOAD,GAD_CONFIGSTORE,GAD_EDITOR,GAD_HELPFILE,
  14.  
  15.         GAD_USE,GAD_CANCEL,GAD_DEFAULT,
  16.         GAD_PAGER,GAD_PAGEGROUP
  17.     };
  18.  
  19. BYTE __regargs
  20. PathPanel(struct Configuration *Config,BYTE *Default)
  21. {
  22.     STATIC LONG LabelTable[] =
  23.     {
  24.         MSG_PATHPANEL_DEFAULT_ASCII_UPLOAD_PATH_GAD,
  25.         MSG_PATHPANEL_DEFAULT_ASCII_DOWNLOAD_PATH_GAD,
  26.         MSG_PATHPANEL_DEFAULT_TEXT_UPLOAD_PATH_GAD,
  27.         MSG_PATHPANEL_DEFAULT_TEXT_DOWNLOAD_PATH_GAD,
  28.         MSG_PATHPANEL_DEFAULT_BINARY_UPLOAD_PATH_GAD,
  29.         MSG_PATHPANEL_DEFAULT_BINARY_DOWNLOAD_PATH_GAD,
  30.         MSG_PATHPANEL_CONFIGURATION_STORAGE_DIR_GAD,
  31.         MSG_PATHPANEL_DEFAULT_TEXT_EDITOR_GAD,
  32.         MSG_PATHPANEL_HELP_TEXT_FILE_GAD
  33.     };
  34.  
  35.     STATIC LONG PageTitleID[5] =
  36.     {
  37.         MSG_V36_0121,
  38.         MSG_V36_0122,
  39.         MSG_V36_0123,
  40.         MSG_V36_0124,
  41.         -1
  42.     };
  43.  
  44.     STATIC BYTE         InitialPage = 0;
  45.  
  46.     LONG             i,Max,Len;
  47.  
  48.     struct LayoutHandle    *Handle;
  49.     BYTE             Cancel = FALSE;
  50.  
  51.     SaveConfig(Config,PrivateConfig);
  52.  
  53.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  54.         LH_LocaleHook,    &LocaleHook,
  55.         LH_ExitFlush,    FALSE,
  56.     TAG_DONE))
  57.     {
  58.         struct Window *PanelWindow;
  59.  
  60.         for(i = Max = 0 ; i < 9 ; i++)
  61.         {
  62.             if((Len = LT_LabelChars(Handle,LocaleString(LabelTable[i]))) > Max)
  63.                 Max = Len;
  64.         }
  65.  
  66.         LT_New(Handle,
  67.             LA_Type,    VERTICAL_KIND,
  68.         TAG_DONE);
  69.         {
  70.             LT_New(Handle,
  71.                 LA_Type,VERTICAL_KIND,
  72.             TAG_DONE);
  73.             {
  74.                 LT_New(Handle,
  75.                     LA_Type,    TAB_KIND,
  76.                     LA_ID,        GAD_PAGER,
  77.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  78.                     LACY_LabelTable,PageTitleID,
  79.                     LACY_AutoPageID,GAD_PAGEGROUP,
  80.                     LACY_TabKey,    TRUE,
  81.                     LA_BYTE,    &InitialPage,
  82.                     LATB_FullWidth,    TRUE,
  83.                 TAG_DONE);
  84.  
  85.                 LT_EndGroup(Handle);
  86.             }
  87.  
  88.             LT_New(Handle,
  89.                 LA_Type,    VERTICAL_KIND,
  90.                 LA_ID,        GAD_PAGEGROUP,
  91.                 LAGR_ActivePage,InitialPage,
  92.             TAG_DONE);
  93.             {
  94.                 LT_New(Handle,
  95.                     LA_Type,    VERTICAL_KIND,
  96.                 TAG_DONE);
  97.                 {
  98.                     LT_New(Handle,
  99.                         LA_Type,    STRING_KIND,
  100.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_ASCII_UPLOAD_PATH_GAD,
  101.                         LA_ID,        GAD_AUPLOAD,
  102.                         LA_Chars,    20,
  103.                         LA_LabelChars,    Max,
  104.                         LAST_Picker,    TRUE,
  105.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  106.                         LA_STRPTR,    Config -> PathConfig -> ASCIIUploadPath,
  107.                     TAG_DONE);
  108.  
  109.                     LT_New(Handle,
  110.                         LA_Type,    STRING_KIND,
  111.                         LA_ID,        GAD_ADOWNLOAD,
  112.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_ASCII_DOWNLOAD_PATH_GAD,
  113.                         LA_LabelChars,    Max,
  114.                         LAST_Picker,    TRUE,
  115.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  116.                         LA_STRPTR,    Config -> PathConfig -> ASCIIDownloadPath,
  117.                     TAG_DONE);
  118.  
  119.                     LT_EndGroup(Handle);
  120.                 }
  121.  
  122.                 LT_New(Handle,
  123.                     LA_Type,        VERTICAL_KIND,
  124.                 TAG_DONE);
  125.                 {
  126.                     LT_New(Handle,
  127.                         LA_Type,    STRING_KIND,
  128.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_TEXT_UPLOAD_PATH_GAD,
  129.                         LA_LabelChars,    Max,
  130.                         LA_ID,        GAD_TUPLOAD,
  131.                         LA_Chars,    20,
  132.                         LAST_Picker,    TRUE,
  133.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  134.                         LA_STRPTR,    Config -> PathConfig -> TextUploadPath,
  135.                     TAG_DONE);
  136.  
  137.                     LT_New(Handle,
  138.                         LA_Type,    STRING_KIND,
  139.                         LA_ID,        GAD_TDOWNLOAD,
  140.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_TEXT_DOWNLOAD_PATH_GAD,
  141.                         LA_LabelChars,    Max,
  142.                         LAST_Picker,    TRUE,
  143.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  144.                         LA_STRPTR,    Config -> PathConfig -> TextDownloadPath,
  145.                     TAG_DONE);
  146.  
  147.                     LT_EndGroup(Handle);
  148.                 }
  149.  
  150.                 LT_New(Handle,
  151.                     LA_Type,    VERTICAL_KIND,
  152.                 TAG_DONE);
  153.                 {
  154.                     LT_New(Handle,
  155.                         LA_Type,    STRING_KIND,
  156.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_BINARY_UPLOAD_PATH_GAD,
  157.                         LA_LabelChars,    Max,
  158.                         LA_ID,        GAD_BUPLOAD,
  159.                         LA_Chars,    20,
  160.                         LAST_Picker,    TRUE,
  161.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  162.                         LA_STRPTR,    Config -> PathConfig -> BinaryUploadPath,
  163.                     TAG_DONE);
  164.  
  165.                     LT_New(Handle,
  166.                         LA_Type,    STRING_KIND,
  167.                         LA_ID,        GAD_BDOWNLOAD,
  168.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_BINARY_DOWNLOAD_PATH_GAD,
  169.                         LA_LabelChars,    Max,
  170.                         LAST_Picker,    TRUE,
  171.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  172.                         LA_STRPTR,    Config -> PathConfig -> BinaryDownloadPath,
  173.                     TAG_DONE);
  174.  
  175.                     LT_EndGroup(Handle);
  176.                 }
  177.  
  178.                 LT_New(Handle,
  179.                     LA_Type,    VERTICAL_KIND,
  180.                 TAG_DONE);
  181.                 {
  182.                     LT_New(Handle,
  183.                         LA_Type,    STRING_KIND,
  184.                         LA_LabelID,    MSG_PATHPANEL_CONFIGURATION_STORAGE_DIR_GAD,
  185.                         LA_LabelChars,    Max,
  186.                         LA_ID,        GAD_CONFIGSTORE,
  187.                         LA_Chars,    20,
  188.                         LAST_Picker,    TRUE,
  189.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  190.                         LA_STRPTR,    Config -> PathConfig -> DefaultStorage,
  191.                     TAG_DONE);
  192.  
  193.                     LT_New(Handle,
  194.                         LA_Type,    STRING_KIND,
  195.                         LA_ID,        GAD_EDITOR,
  196.                         LA_LabelID,    MSG_PATHPANEL_DEFAULT_TEXT_EDITOR_GAD,
  197.                         LA_LabelChars,    Max,
  198.                         LAST_Picker,    TRUE,
  199.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  200.                         LA_STRPTR,    Config -> PathConfig -> Editor,
  201.                     TAG_DONE);
  202.  
  203.                     LT_New(Handle,
  204.                         LA_Type,    STRING_KIND,
  205.                         LA_ID,        GAD_HELPFILE,
  206.                         LA_LabelID,    MSG_PATHPANEL_HELP_TEXT_FILE_GAD,
  207.                         LA_LabelChars,    Max,
  208.                         LAST_Picker,    TRUE,
  209.                         GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  210.                         LA_STRPTR,    Config -> PathConfig -> HelpFile,
  211.                     TAG_DONE);
  212.  
  213.                     LT_EndGroup(Handle);
  214.                 }
  215.  
  216.                 LT_EndGroup(Handle);
  217.             }
  218.  
  219.             LT_New(Handle,
  220.                 LA_Type,VERTICAL_KIND,
  221.             TAG_DONE);
  222.             {
  223.                 LT_New(Handle,
  224.                     LA_Type,    XBAR_KIND,
  225.                     LAXB_FullSize,    TRUE,
  226.                 TAG_DONE);
  227.  
  228.                 LT_EndGroup(Handle);
  229.             }
  230.  
  231.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  232.                 LAGR_SameSize,    TRUE,
  233.                 LAGR_Spread,    TRUE,
  234.             TAG_DONE);
  235.             {
  236.                 LT_New(Handle,
  237.                     LA_Type,    BUTTON_KIND,
  238.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  239.                     LA_ID,        GAD_USE,
  240.                     LABT_ReturnKey,    TRUE,
  241.                     LABT_ExtraFat,    TRUE,
  242.                 TAG_DONE);
  243.  
  244.                 if(Default)
  245.                 {
  246.                     LT_New(Handle,
  247.                         LA_Type,    BUTTON_KIND,
  248.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  249.                         LA_ID,        GAD_DEFAULT,
  250.                         LABT_ExtraFat,    TRUE,
  251.                     TAG_DONE);
  252.                 }
  253.  
  254.                 LT_New(Handle,
  255.                     LA_Type,    BUTTON_KIND,
  256.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  257.                     LA_ID,        GAD_CANCEL,
  258.                     LABT_EscKey,    TRUE,
  259.                     LABT_ExtraFat,    TRUE,
  260.                 TAG_DONE);
  261.  
  262.                 LT_EndGroup(Handle);
  263.             }
  264.  
  265.             LT_EndGroup(Handle);
  266.         }
  267.  
  268.         if(PanelWindow = LT_Build(Handle,
  269.             LAWN_TitleID,        MSG_PATHPANEL_PATH_PREFERENCES_TXT,
  270.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  271.             LAWN_HelpHook,        &GuideHook,
  272.             LAWN_Parent,        Window,
  273.             WA_DepthGadget,        TRUE,
  274.             WA_CloseGadget,        TRUE,
  275.             WA_DragBar,        TRUE,
  276.             WA_RMBTrap,        TRUE,
  277.             WA_Activate,        TRUE,
  278.             WA_SimpleRefresh,    TRUE,
  279.         TAG_DONE))
  280.         {
  281.             struct IntuiMessage    *Message;
  282.             BOOLEAN             Done = FALSE;
  283.             ULONG             MsgClass;
  284.             struct Gadget        *MsgGadget;
  285.  
  286.             GuideContext(CONTEXT_PATHS);
  287.  
  288.             PushWindow(PanelWindow);
  289.  
  290.             LT_ShowWindow(Handle,TRUE);
  291.  
  292.             do
  293.             {
  294.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  295.                 {
  296.                     SaveConfig(PrivateConfig,Config);
  297.  
  298.                     break;
  299.                 }
  300.  
  301.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  302.                 {
  303.                     MsgClass    = Message -> Class;
  304.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  305.  
  306.                     LT_ReplyIMsg(Message);
  307.  
  308.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  309.                     {
  310.                         SaveConfig(PrivateConfig,Config);
  311.  
  312.                         Done = TRUE;
  313.                     }
  314.  
  315.                     if(MsgClass == IDCMP_GADGETUP)
  316.                     {
  317.                         switch(MsgGadget -> GadgetID)
  318.                         {
  319.                             case GAD_USE:
  320.  
  321.                                 LT_UpdateStrings(Handle);
  322.  
  323.                                 Done = TRUE;
  324.                                 break;
  325.  
  326.                             case GAD_CANCEL:
  327.  
  328.                                 SaveConfig(PrivateConfig,Config);
  329.  
  330.                                 Cancel = Done = TRUE;
  331.                                 break;
  332.  
  333.                             case GAD_DEFAULT:
  334.  
  335.                                 *Default = TRUE;
  336.  
  337.                                 Done = TRUE;
  338.                                 break;
  339.  
  340.                             default:
  341.  
  342.                                 if(MsgGadget -> GadgetID >= GAD_AUPLOAD && MsgGadget -> GadgetID <= GAD_HELPFILE)
  343.                                 {
  344.                                     if(TypeOfMem((APTR)LT_GetAttributes(Handle,MsgGadget -> GadgetID,TAG_DONE)))
  345.                                     {
  346.                                         UBYTE DummyBuffer[MAX_FILENAME_LENGTH];
  347.  
  348.                                         strcpy(DummyBuffer,(STRPTR)LT_GetAttributes(Handle,MsgGadget -> GadgetID,TAG_DONE));
  349.  
  350.                                         if(MsgGadget -> GadgetID < GAD_EDITOR)
  351.                                             FindDrawer(PanelWindow,DummyBuffer,TRUE,NULL);
  352.                                         else
  353.                                         {
  354.                                             if(MsgGadget -> GadgetID == GAD_EDITOR)
  355.                                                 FindProgram(PanelWindow,DummyBuffer,NULL);
  356.                                             else
  357.                                                 FindFile(PanelWindow,DummyBuffer,NULL);
  358.                                         }
  359.                                     }
  360.                                 }
  361.  
  362.                                 break;
  363.                         }
  364.                     }
  365.  
  366.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  367.                     {
  368.                         if(MsgGadget -> GadgetID >= GAD_AUPLOAD && MsgGadget -> GadgetID <= GAD_HELPFILE)
  369.                         {
  370.                             WORD    ID    = MsgGadget -> GadgetID;
  371.                             STRPTR    Name    = LT_GetString(Handle,ID);
  372.  
  373.                             if(Name)
  374.                             {
  375.                                 UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  376.                                             *DummyChar;
  377.                                 struct FileRequester    *FileRequest;
  378.  
  379.                                 LT_LockWindow(PanelWindow);
  380.  
  381.                                 strcpy(DummyBuffer,Name);
  382.  
  383.                                 if(ID < GAD_EDITOR || !DummyBuffer[0])
  384.                                     DummyChar = "";
  385.                                 else
  386.                                 {
  387.                                     if(FilePart(DummyBuffer) == DummyBuffer)
  388.                                         DummyBuffer[0] = 0;
  389.                                     else
  390.                                     {
  391.                                         DummyChar = PathPart(DummyBuffer);
  392.  
  393.                                         *DummyChar = 0;
  394.                                     }
  395.  
  396.                                     DummyChar = FilePart(Name);
  397.                                 }
  398.  
  399.                                 if(FileRequest = GetFile(PanelWindow,LocaleString(ID - GAD_AUPLOAD + MSG_PATHPANEL_SELECT_DEFAULT_ASCII_UPLOAD_PATH_TXT),DummyBuffer,DummyChar,DummyBuffer,NULL,FALSE,FALSE,ID < GAD_EDITOR,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  400.                                 {
  401.                                     if(ID < GAD_EDITOR)
  402.                                         FindDrawer(PanelWindow,DummyBuffer,TRUE,NULL);
  403.                                     else
  404.                                     {
  405.                                         if(ID == GAD_EDITOR)
  406.                                             FindProgram(PanelWindow,DummyBuffer,NULL);
  407.                                         else
  408.                                             FindFile(PanelWindow,DummyBuffer,NULL);
  409.                                     }
  410.  
  411.                                     LT_SetAttributes(Handle,ID,
  412.                                         GTST_String,    DummyBuffer,
  413.                                     TAG_DONE);
  414.  
  415.                                     FreeAslRequest(FileRequest);
  416.                                 }
  417.  
  418.                                 LT_UnlockWindow(PanelWindow);
  419.                             }
  420.                         }
  421.                     }
  422.                 }
  423.             }
  424.             while(!Done);
  425.  
  426.             PopWindow();
  427.         }
  428.  
  429.         LT_DeleteHandle(Handle);
  430.     }
  431.  
  432.     if(Default)
  433.         return((BYTE)(!Cancel));
  434.     else
  435.     {
  436.         if(Config -> PathConfig && Config -> TransferConfig && Config -> MiscConfig)
  437.         {
  438.             if(Config -> MiscConfig -> ProtectiveMode && !Config -> TransferConfig -> OverridePath)
  439.             {
  440.                 STRPTR    Library    = NULL,
  441.                     Path    = NULL;
  442.  
  443.                 if(Config -> TransferConfig -> DefaultType == XFER_XPR && Config -> TransferConfig -> DefaultLibrary[0])
  444.                 {
  445.                     Library    = Config -> TransferConfig -> DefaultLibrary;
  446.                     Path    = Config -> PathConfig -> BinaryDownloadPath;
  447.                 }
  448.  
  449.                 if(Config -> TransferConfig -> ASCIIDownloadType == XFER_XPR && Config -> TransferConfig -> ASCIIDownloadLibrary[0])
  450.                 {
  451.                     Library    = Config -> TransferConfig -> ASCIIDownloadLibrary;
  452.                     Path    = Config -> PathConfig -> ASCIIDownloadPath;
  453.                 }
  454.  
  455.                 if(Config -> TransferConfig -> TextDownloadType == XFER_XPR && Config -> TransferConfig -> TextDownloadLibrary[0])
  456.                 {
  457.                     Library    = Config -> TransferConfig -> TextDownloadLibrary;
  458.                     Path    = Config -> PathConfig -> TextDownloadPath;
  459.                 }
  460.  
  461.                 if(Config -> TransferConfig -> BinaryDownloadType == XFER_XPR && Config -> TransferConfig -> BinaryDownloadLibrary[0])
  462.                 {
  463.                     Library    = Config -> TransferConfig -> BinaryDownloadLibrary;
  464.                     Path    = Config -> PathConfig -> BinaryDownloadPath;
  465.                 }
  466.  
  467.                 if(Library && Path)
  468.                 {
  469.                     UBYTE LocalBuffer[MAX_FILENAME_LENGTH];
  470.  
  471.                     if(*Path == 0)
  472.                     {
  473.                         if(GetCurrentDirName(LocalBuffer,MAX_FILENAME_LENGTH))
  474.                             Path = LocalBuffer;
  475.                     }
  476.  
  477.                     if(MyEasyRequest(Window,LocaleString(MSG_XPR_PATH_TXT),LocaleString(MSG_GLOBAL_YES_NO_TXT),Library,Path))
  478.                         Config -> TransferConfig -> OverridePath = TRUE;
  479.                 }
  480.             }
  481.         }
  482.  
  483.         return((BYTE)memcmp(PrivateConfig -> PathConfig,Config -> PathConfig,sizeof(struct PathSettings)));
  484.     }
  485. }
  486.